<?php
	session_start();
	require_once('system/project_settings.php');		// Подключаем основной файл конфигурации
	
	$getStrPos = strpos($_SERVER['REQUEST_URI'], '?');
	$strUrl = substr($_SERVER['REQUEST_URI'], 0, $getStrPos ? $getStrPos : strlen($_SERVER['REQUEST_URI']));
	$arrRequest = explode('/', substr($strUrl, 1)); // Преобразовываем URL к массиву
	
	for ($i = 0; $i <= 5; $i++) {
		if (!isset($arrRequest[$i])) $arrRequest[$i] = ''; // Для упрощения обработки контроллером
	}
	
	//User_Seance::authorizationIn(new User_User(1));
	// Определение контроллера для обработки запроса
	switch ($arrRequest[0]) {
		case '':	   // Главная страница
			$controller = new Controller_Index($arrRequest);
			break;
		case 'products': // Страницы товаров
			$controller = new Controller_Product($arrRequest);
			break;
		case 'categories': // Страницы категорий
			$controller = new Controller_Category($arrRequest);
			break;
		case 'properties': // Страницы товаров по дополнительым свойствам
			$controller = new Controller_Product($arrRequest);
			break;
		case 'parse': // Страницы парсинга
			$controller = new Controller_Parse($arrRequest);
			break;
		case 'articles': // Страницы статей
			$controller = new Controller_Article($arrRequest);
			break;
		case 'profile': // Страницы профиля
			$controller = new Controller_Profile($arrRequest);
			break;
		case 'auth': // Страница аутентификации
			$controller = new Controller_Auth($arrRequest);
			break;
		case 'logout': // Разлогиниться
			User_Seance::authorizationOut();
			break;
		case 'news':
			$controller = new Controller_News($arrRequest);
			break;
		case 'cart':
			$controller = new Controller_Cart($arrRequest);
			break;
		case 'cms':	// Страницы админки
			switch ($arrRequest[1]) {
				case '': case 'articles': // Админка - обработка действий, связанных со статьями
					$controller = new Controller_Admin_Article($arrRequest);
					break;
				case 'statistic': // Админка - обработка действий, связанных со статистикой
					$controller = new Controller_Admin_Statistic($arrRequest);
					break;
				case 'orders': // Админка - обработка действий, связанных с заказами
					$controller = new Controller_Admin_Order($arrRequest);
					break;
				case 'categories': // Админка - обработка действий, связанных с категориями товаров
					$controller = new Controller_Admin_Category($arrRequest);
					break;
				case 'products': // Админка - обработка действий, связанных с товарами
					$controller = new Controller_Admin_Product($arrRequest);
					break;
				case 'product_properties': // Админка - обработка действий, связанных со свойствами товаров
					$controller = new Controller_Admin_ProductProperty($arrRequest);
					break;
				case 'product_property_values': // Админка - обработка действий, связанных со значениями свойств товаров
					$controller = new Controller_Admin_ProductPropertyValue($arrRequest);
					break;
				case 'selections': // Админка - обработка действий, связанных с подборками
					$controller = new Controller_Admin_Selection($arrRequest);
					break;
				case 'sizes': // Админка - обработка действий, связанных с размерами
					$controller = new Controller_Admin_Size($arrRequest);
					break;
				case 'receipts': // Админка - обработка действий, связанных с приходом товаров
					$controller = new Controller_Admin_Receipt($arrRequest);
					break;
				case 'actives': // Админка - обработка действий, связанных с активом товаров
					$controller = new Controller_Admin_Active($arrRequest);
					break;
				case 'brands': // Админка - обработка действий, связанных с категориями товаров
					$controller = new Controller_Admin_Brand($arrRequest);
					break;
				default:
					$controller = new Controller_Admin($arrRequest);
			}
			break;
		case 'ajax': // обработка AJAX - запросов
			switch ($arrRequest[1]) {
				case 'user':
					$controller = new Controller_Ajax_User($arrRequest);
					break;
				case 'product':
					$controller = new Controller_Ajax_Product($arrRequest);
					break;
				case 'auto-suggest':
					$controller = new Controller_Ajax_Autosuggest($arrRequest);
				case 'cart':
					$controller = new Controller_Ajax_Cart($arrRequest);
					break;
				case 'photo':
					$controller = new Controller_Ajax_Photo($arrRequest);
					break;
				case 'review':
					$controller = new Controller_Ajax_Review($arrRequest);
					break;
				case 'feedback':
					$controller = new Controller_Ajax_Feedback($arrRequest);
					break;
				default:
					$controller = new Controller_Ajax($arrRequest);
			}
			break;
		default:
			$controller = new Controller_Default($arrRequest); // Контроллер по умолчанию
			break;
	}

	User_Seance::visit();
	try {
		$controller->action();
	}
	catch (Exception $e) {
		$errors = array(404, 403, 503);
		if (in_array($e->getCode(), $errors)) {
			$controller->setError($e->getCode());
			$controller->showError();
		}
	}
?>